package org.example.aienglishapp_login.entity.login;

import jakarta.persistence.*;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

import java.util.HashSet;
import java.util.Set;

/**
 * 权限实体类。
 * 该类用于存储权限信息，包括权限的唯一标识符、名称、与角色的多对多关系。
 *
 * @author xlj
 * @version 1.0
 * @since 2024-10-1
 */
@Entity
@Table(name = "permissions")
@EqualsAndHashCode(of = {"permissionId"})
public class Permission {

    /**
     * 权限的唯一标识符。
     * 该字段是主键，并由数据库自动生成。
     */
    @Setter
    @Getter
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long permissionId;

    /**
     * 权限的名称。
     * 该字段不能为空，并且在数据库中必须是唯一的。
     */
    @Setter
    @Getter
    @Column(nullable = false, unique = true)
    private String permissionName;

    /**
     * 与该权限关联的角色集合。
     * 使用多对多关系映射，角色与权限之间的关系由角色表维护。
     */
    @Setter
    @Getter
    @ManyToMany(mappedBy = "permissions")
    private Set<Role> roles = new HashSet<>();
}